export default class Tools {
	/**
	 * 格式化桩号
	 */
	static GetStakeNo() {
		let StakeNo = "K" + str;
		StakeNo = StakeNo.replace(".", "+");
		let P_Location_s_s = StakeNo.split('+');
		if (P_Location_s_s[1]) {
			StakeNo = P_Location_s_s[0] + "+" + P_Location_s_s[1];
			if (P_Location_s_s[1].length == 2) {
				StakeNo = StakeNo + "0";
			}
			if (P_Location_s_s[1].length == 1) {
				StakeNo = StakeNo + "00";
			}
		}
		return StakeNo;
	}

	/**
	 * 获取系统信息
	 */
	static getSystemInfo() {
		return new Promise((a, b) => {
			uni.getSystemInfo({
				success(info) {
					a(info);
				},
				fail(e) {
					b(e);
				}
			})
		})
	}

	static toast(text, position = "bottom", icon = 'none') {
		//#ifdef H5
		uni.showToast({
			title: text,
			icon: icon,
			position: position
		})
		//#endif

		//#ifdef APP-PLUS || APP-PLUS-NVUE
		plus.nativeUI.toast(text);
		//#endif


	}


	static HtmlEncode(str) {
		if (!str || str == "")
			return "";
		let div = document.createElement('div');
		div.appendChild(document.createTextNode(s));
		return div.innerHTML;
	}

	static HtmlDecode(str) {
		if (!str || str == "")
			return "";
		let _div = document.createElement('div');
		_div.innerHTML = str;
		return _div.innerText || div.textContent;
	}

	/**
	 * 版本号比较
	 * @param {Object} oldVer
	 * @param {Object} newVer
	 */
	static checkVer(oldVer, newVer) {
		let OldVerSub = oldVer.split('.');
		let NewVerSub = newVer.split('.');
		if (Number(OldVerSub[0]) < Number(NewVerSub[0])) {
			return true;
		} else {
			if (Number(OldVerSub[1]) < Number(NewVerSub[1])) {
				return true;
			} else {
				if (Number(OldVerSub[2]) < Number(NewVerSub[2])) {
					return true;
				}
			}
		}
		return false;
	}

	/**
	 * 获取uuid 如 uuid(10,16)
	 * @param {Object} len 返回的字符长度
	 * @param {Object} radix 使用的进制编码
	 */
	static uuid(len, radix) {
		let chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
		let uuid = [],
			i;
		radix = radix || chars.length;

		if (len) {
			// Compact form
			for (i = 0; i < len; i++)
				uuid[i] = chars[0 | Math.random() * radix];
		} else {
			// rfc4122, version 4 form
			let r;

			// rfc4122 requires these characters
			uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
			uuid[14] = '4';

			// Fill in random data.  At i==19 set the high bits of clock sequence as
			// per rfc4122, sec. 4.1.5
			for (i = 0; i < 36; i++) {
				if (!uuid[i]) {
					r = 0 | Math.random() * 16;
					uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
				}
			}
		}

		return uuid.join('');
	}

	/**
	 * 获取URL中的参数
	 * @param {Object} UrlStr
	 */
	static GetUrlParams(UrlStr) {
		let _UrlParams = {};
		let _UrlSub = UrlStr.split('?');
		if (_UrlSub[1] && _UrlSub[1] != "") {
			_UrlSub[1] += "&";
			let _Params = _UrlSub[1].split('&');
			for (let i in _Params) {
				if (_Params[i] != "") {
					let _param = _Params[i].split('=');
					_UrlParams[_param[0]] = _param[1];
				}
			}
		}
		return _UrlParams;
	}

	/**
	 * 四舍五入
	 * @param {Object} Dight
	 * @param {Object} How
	 */
	static forDight(Dight, How) {
		Dight = Math.round(Dight * Math.pow(10, How)) / Math.pow(10, How);
		return Dight;
	}

	/**
	 * 是否全是数字
	 * @param {Object} str
	 */
	static isNum(str) {
		if (isNaN(str)) {
			return false;
		}
		return true;
	}

	/**
	 * 获取真实字符长度
	 * @param {Object} str
	 */
	static GetLen(str) {
		var unLen = str.replace(/[^\x00-\xff]/g, "**").length;
		return unLen;
	}

	/**
	 * 截取字符串
	 * @param {Object} str
	 * @param {Object} len
	 */
	static fixLen(str, len) {
		if (str.length > len) {
			str = str.substring(0, len) + "...";
		}
		return str;
	}

	/**
	 * 解码 base64
	 * @param {Object} str
	 */
	static base64decode(str) {
		var base64DecodeChars = new Array(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
			-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53,
			54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
			16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
			39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);
		let c1, c2, c3, c4;
		let i, len, out;

		len = str.length;
		i = 0;
		out = "";
		while (i < len) {
			/* c1 */
			do {
				c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
			} while (i < len && c1 == -1);
			if (c1 == -1)
				break;

			/* c2 */
			do {
				c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
			} while (i < len && c2 == -1);
			if (c2 == -1)
				break;

			out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));

			/* c3 */
			do {
				c3 = str.charCodeAt(i++) & 0xff;
				if (c3 == 61)
					return out;
				c3 = base64DecodeChars[c3];
			} while (i < len && c3 == -1);
			if (c3 == -1)
				break;

			out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));

			/* c4 */
			do {
				c4 = str.charCodeAt(i++) & 0xff;
				if (c4 == 61)
					return out;
				c4 = base64DecodeChars[c4];
			} while (i < len && c4 == -1);
			if (c4 == -1)
				break;
			out += String.fromCharCode(((c3 & 0x03) << 6) | c4);
		}
		return out;
	}

	/**
	 *编码 base64 
	 * @param {Object} str
	 */
	static base64encode(str) {
		let out, i, len;
		var c1, c2, c3;
		var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
		len = str.length;
		i = 0;
		out = "";
		while (i < len) {
			c1 = str.charCodeAt(i++) & 0xff;
			if (i == len) {
				out += base64EncodeChars.charAt(c1 >> 2);
				out += base64EncodeChars.charAt((c1 & 0x3) << 4);
				out += "==";
				break;
			}
			c2 = str.charCodeAt(i++);
			if (i == len) {
				out += base64EncodeChars.charAt(c1 >> 2);
				out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
				out += base64EncodeChars.charAt((c2 & 0xF) << 2);
				out += "=";
				break;
			}
			c3 = str.charCodeAt(i++);
			out += base64EncodeChars.charAt(c1 >> 2);
			out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
			out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6));
			out += base64EncodeChars.charAt(c3 & 0x3F);
		}
		return out;
	}

/**
 * 图片转base64
 * @param {Object} img
 * @param {Object} ext
 */
	static getImageBase64(img, ext) {
		let canvas = document.createElement("canvas"); //创建canvas DOM元素，并设置其宽高和图片一样
		canvas.width = img.width;
		canvas.height = img.height;
		let ctx = canvas.getContext("2d");
		ctx.drawImage(img, 0, 0, img.width, img.height); //使用画布画图
		let dataURL = canvas.toDataURL("image/" + ext); //返回的是一串Base64编码的URL并指定格式
		canvas = null; //释放
		return dataURL;
	}
	
	/**
	 * SHA1 加密
	 * @param {Object} msg
	 */
	static SHA1(msg) {

		function rotate_left(n, s) {
			var t4 = (n << s) | (n >>> (32 - s));
			return t4;
		};

		function lsb_hex(val) {
			var str = "";
			var i;
			var vh;
			var vl;

			for (i = 0; i <= 6; i += 2) {
				vh = (val >>> (i * 4 + 4)) & 0x0f;
				vl = (val >>> (i * 4)) & 0x0f;
				str += vh.toString(16) + vl.toString(16);
			}
			return str;
		};

		function cvt_hex(val) {
			var str = "";
			var i;
			var v;

			for (i = 7; i >= 0; i--) {
				v = (val >>> (i * 4)) & 0x0f;
				str += v.toString(16);
			}
			return str;
		};

		function Utf8Encode(string) {
			string = string.replace(/\r\n/g, "\n");
			var utftext = "";

			for (var n = 0; n < string.length; n++) {

				var c = string.charCodeAt(n);

				if (c < 128) {
					utftext += String.fromCharCode(c);
				} else if ((c > 127) && (c < 2048)) {
					utftext += String.fromCharCode((c >> 6) | 192);
					utftext += String.fromCharCode((c & 63) | 128);
				} else {
					utftext += String.fromCharCode((c >> 12) | 224);
					utftext += String.fromCharCode(((c >> 6) & 63) | 128);
					utftext += String.fromCharCode((c & 63) | 128);
				}

			}

			return utftext;
		};

		var blockstart;
		var i, j;
		var W = new Array(80);
		var H0 = 0x67452301;
		var H1 = 0xEFCDAB89;
		var H2 = 0x98BADCFE;
		var H3 = 0x10325476;
		var H4 = 0xC3D2E1F0;
		var A, B, C, D, E;
		var temp;

		msg = Utf8Encode(msg);

		var msg_len = msg.length;

		var word_array = new Array();
		for (i = 0; i < msg_len - 3; i += 4) {
			j = msg.charCodeAt(i) << 24 | msg.charCodeAt(i + 1) << 16 | msg.charCodeAt(i + 2) << 8 | msg.charCodeAt(i + 3);
			word_array.push(j);
		}

		switch (msg_len % 4) {
			case 0:
				i = 0x080000000;
				break;
			case 1:
				i = msg.charCodeAt(msg_len - 1) << 24 | 0x0800000;
				break;

			case 2:
				i = msg.charCodeAt(msg_len - 2) << 24 | msg.charCodeAt(msg_len - 1) << 16 | 0x08000;
				break;

			case 3:
				i = msg.charCodeAt(msg_len - 3) << 24 | msg.charCodeAt(msg_len - 2) << 16 | msg.charCodeAt(msg_len - 1) << 8 |
					0x80;
				break;
		}

		word_array.push(i);

		while ((word_array.length % 16) != 14)
			word_array.push(0);

		word_array.push(msg_len >>> 29);
		word_array.push((msg_len << 3) & 0x0ffffffff);

		for (blockstart = 0; blockstart < word_array.length; blockstart += 16) {

			for (i = 0; i < 16; i++)
				W[i] = word_array[blockstart + i];
			for (i = 16; i <= 79; i++)
				W[i] = rotate_left(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);

			A = H0;
			B = H1;
			C = H2;
			D = H3;
			E = H4;

			for (i = 0; i <= 19; i++) {
				temp = (rotate_left(A, 5) + ((B & C) | (~B & D)) + E + W[i] + 0x5A827999) & 0x0ffffffff;
				E = D;
				D = C;
				C = rotate_left(B, 30);
				B = A;
				A = temp;
			}

			for (i = 20; i <= 39; i++) {
				temp = (rotate_left(A, 5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff;
				E = D;
				D = C;
				C = rotate_left(B, 30);
				B = A;
				A = temp;
			}

			for (i = 40; i <= 59; i++) {
				temp = (rotate_left(A, 5) + ((B & C) | (B & D) | (C & D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff;
				E = D;
				D = C;
				C = rotate_left(B, 30);
				B = A;
				A = temp;
			}

			for (i = 60; i <= 79; i++) {
				temp = (rotate_left(A, 5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff;
				E = D;
				D = C;
				C = rotate_left(B, 30);
				B = A;
				A = temp;
			}

			H0 = (H0 + A) & 0x0ffffffff;
			H1 = (H1 + B) & 0x0ffffffff;
			H2 = (H2 + C) & 0x0ffffffff;
			H3 = (H3 + D) & 0x0ffffffff;
			H4 = (H4 + E) & 0x0ffffffff;

		}

		var temp = cvt_hex(H0) + cvt_hex(H1) + cvt_hex(H2) + cvt_hex(H3) + cvt_hex(H4);

		return temp.toLowerCase();

	}

}
